iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0

前言

JWS 跟 JWE 一樣也可以自己包一個header,但是這篇文章我想介紹的是 signature 。先附上程式碼

let signPrivateKey = Curve25519.Signing.PrivateKey()
let payload = "Hello world".data(using: .utf8)!

let header = DefaultJWSHeaderImpl(algorithm: .EdDSA,
                                  keyID: "1",
                                  type: "JWS",
                                  contentType: "application/json")
// 方式一
let jwsOrigin = try! JWS(payload: payload,
                         protectedHeader: header,
                         key: signPrivateKey)
// 方式二
let jws = try! JWS(protectedHeader: header,
                   data: payload,
                   signature: jwsOrigin.signature)

let jwsString = jws.compactSerialization

let isVerify = try! JWS.verify(jwsString: jwsString,
                               payload: payload,
                               key: signPrivateKey.publicKey)

print(isVerify)

第一種方式

  • JWS(payload:protectedHeader:key:)

這是一個完整的 JWS 創建過程。提供payload、保護頭部和簽名私鑰。初始化器會自動為你生成簽名。

第二種方式

  • JWS(protectedHeader:data:signature:)

這是一個已有簽名的 JWS 對象的構造方法。你需要自己提供已經計算好的簽名。適用於當你已經有了簽名,只是想構造一個 JWS 對象的情況。

主要區別在於:第一種方式會自動為你生成簽名,而第二種方式需要你自己提供簽名。第一種更適合創建新的 JWS,第二種則適合重構已有的 JWS 數據。


上一篇
Day18 - 實作 JWS 驗證(1)
下一篇
Day20 - JWS Compact String & Json Flattened
系列文
Xiang教你進階Swift從有到精30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言